/*
 * ************************************************************************
 * 本文件归属于西安协同时光软件有限公司，未经许可，不得擅自使用、拷贝和修改 项目组:金堆城钼业股份有限公司科研项目管理信息系统项目组 版 本: 1.0 日
 * 期：Mar 10, 2010 时 间：11:42:00 PM 作 者： Administrator
 * ************************************************************************
 */
package com.manager.commons;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.manager.commons.config.ConfigFactory;
import com.manager.commons.config.Constants;

/**
 * 处理手动加载spring容器 获取到Spring管理的Bean对象类
 * 
 * @author Alex
 * @since jdk1.6
 */
public class BeanFactory {
	/**
	 * Spring Bean 工厂对象.
	 */
	private static BeanFactory beanFactory;

	/**
	 * 应用程序上下文对象
	 */
	private ApplicationContext context;

	private BeanFactory(ApplicationContext context) {
		if(context == null) {
			String strPath = ConfigFactory.getInstance().getConfig().getString(Constants.SYC_SYSTEM,Constants.SPRING_LOCATION);
			this.context = new ClassPathXmlApplicationContext(strPath.split(","));
		} else {
			this.context = context;
		}
	}

	/**
	 * 获取Bean工厂对象.
	 * 
	 * @param context
	 *        应用程序上下文.
	 * @return
	 * @author Alex
	 */
	public static synchronized BeanFactory getInstance(ApplicationContext context) {
		if(beanFactory == null) {
			beanFactory = new BeanFactory(context);
		}

		return beanFactory;
	}

	/**
	 * 获取Bean工厂对象.
	 * 
	 * @return BeanFactory
	 * @author Alex
	 */
	public static BeanFactory getInstance() {
		return getInstance(null);
	}

	/**
	 * 通过bean的ID获取到Spring管理的Bean对象
	 * 
	 * @param beanId
	 * @return Object
	 * @author Alex
	 */
	public Object getBean(String beanId) {
		return context.getBean(beanId);
	}
}
